#include <iostream>
using namespace std;
#define MaxSize 10
// 循环队列
typedef struct
{
  int data[MaxSize];
  int front;
  int back;
} CQueue;
// 初始化循环队列
void InitQueue(CQueue &Q)
{
  Q.front = Q.back = 0;
}
// 求循环队列元素个数
int GetSize(CQueue &Q)
{
  int size = (Q.back - Q.front + MaxSize) % MaxSize;
  return size;
}
// 入队
bool EnQueue(CQueue &Q, int x)
{
  // back 的后一位如果是 front 的话则队满
  // 如果 back 和 front 处于同一位的话则队空
  int newBack = (Q.back + 1) % MaxSize;
  if (newBack == Q.front)
  {
    return false;
  }
  Q.data[Q.back] = x;
  Q.back = newBack;
  return true;
}
// 出队
bool DeQueue(CQueue &Q, int &x)
{
  if (Q.front == Q.back)
  {
    return false;
  }
  x = Q.data[Q.front];
  Q.front = (Q.front + 1) % MaxSize;
  return true;
}
int main()
{
  CQueue Q;
  Q.front = Q.back = 0;
  int x;
  EnQueue(Q, 1);
  EnQueue(Q, 2);
  cout << GetSize(Q) << endl;
  DeQueue(Q, x);
  cout << x << endl;
  return 0;
}